昨天我們設計好了 User 與 Order Schema,今天要讓顧客能在 LINE 上直接看到「商品選單」。
LINE 提供的 Flex Message 可以自由排版文字、圖片、按鈕,是打造互動選單的最佳方式。
本文將介紹 Flex Message 的結構,並示範如何建立一個簡單的商品卡片與商品清單。
客製化卡片訊息:用 JSON 定義訊息版型。
支援多種元素:文字、圖片、按鈕、分隔線。
應用場景:商品選單、訂單摘要、通知卡片。
官方 Playground:Flex Message Simulator。
Flex Message 採三層結構:Container → Block → Component(官方文件稱「階層式結構」)。
1) Container(容器)
bubble:單張訊息卡。
carousel:多張 bubble 並排,可左右滑動。
2) Block(卡片區塊)
header:標題或抬頭。
hero:主視覺(通常是圖片或影片)。
body:主要內容。
footer:操作按鈕與補充資訊。
區塊的擺放順序為 header → hero → body → footer;同一個
bubble每種 block 最多各 1 次,也可以只用其中幾個(不是必填)。
3) Component(元件)
box:版面容器,決定排列方向 horizontal、vertical、baseline(類似 CSS flexbox)。
text / span:文字與行內樣式(span 可混搭不同字型樣式)。
image / video:圖片與影片(影片常放在 hero)。
button:按鈕,需綁定 action(如 message、postback、uri)。
icon:與文字對齊的小圖示(僅能放在 baseline box 裡)。
separator:分隔線。
filler:空白填充(已標示為 deprecated)。
版面重點(Layout 摘要)
box.layout 影響可放哪些子元件;baseline 僅支援 icon/text/span 等,horizontal/vertical 則可放大多數元件。
flex 會依比例分配寬/高(與 CSS flex 類似);flex: 0 代表以內容寬/高為主。
更多細節可參考官方文件:
Flex Message elements(層級、元件):https://developers.line.biz/en/docs/messaging-api/flex-message-elements/
Flex Message layout(版面與 flex 規則):https://developers.line.biz/en/docs/messaging-api/flex-message-layout/
範例 JSON:
{
"type": "bubble",
"body": {
"type": "box",
"layout": "vertical",
"contents": [
{ "type": "text", "text": "紅茶拿鐵", "weight": "bold", "size": "xl" },
{ "type": "text", "text": "$60", "color": "#AAAAAA", "size": "sm" }
]
},
"footer": {
"type": "box",
"layout": "horizontal",
"contents": [
{
"type": "button",
"action": { "type": "message", "label": "下單", "text": "我要紅茶拿鐵" }
}
]
}
}
👉 使用者點「下單」後,會自動傳送「我要紅茶拿鐵」訊息給 Bot。

如果要展示多個商品,可以使用 carousel:
{
"type": "carousel",
"contents": [ bubble1, bubble2, bubble3 ]
}
這樣就能一次顯示多個商品卡片,讓顧客滑動選擇。

在 index.js 中使用 LINE SDK:
client.replyMessage(event.replyToken, {
type: "flex",
altText: "商品選單",
contents: {
type: "carousel",
contents: [ bubble1(第一張商品卡片 JSON)、bubble2(第二張商品卡片 JSON) ]
}
});
altText:必要欄位,供不支援 Flex Message 的裝置顯示。
bubble1(第一張商品卡片 JSON)、bubble2(第二張商品卡片 JSON):前面定義好的 JSON 卡片。

建議先用 Flex Message Simulator 編輯 JSON,再貼到程式中。
按鈕的 action 有兩種常用方式:
message:回傳文字訊息(簡單直觀)。
postback:回傳隱藏資料給後端(適合正式訂單流程)。
初期可以先用 message,Day 10 我們會把流程串起來。
今天我們完成了:
認識 Flex Message 的結構。
建立商品卡片與商品清單 (Carousel)。
在程式中回覆 Flex Message,讓顧客能在 LINE 上直接互動。
重點回顧:
Flex Message 是商品選單的最佳工具。
JSON 定義結構清晰,先用 Simulator 測試最有效率。
按鈕 action 可以是文字回傳,也可以是 postback。
明天(Day 10),我們要開始建立 完整訂單流程:商品 → 數量 → 確認 → 送出!
LINE Flex Message Simulator
LINE Using Flex Messages Docs